const readline = require('readline')

// const rl = readline.createInterface({
//   input: process.stdin,
//   output: process.stdout
// })
// 等待输入 输入后触发回调函数
// rl.question("请输入你要选择的操作", (answer) => {
//   // TODO：将答案记录在数据库中
//   console.log(`感谢您的宝贵意见：${answer}`)

//   rl.close()
// })

// 封装栈类
function Stack() {
  // 在对象里面定义的一般称之为方法(method) 补充
  // 在外面一般称之为函数(function)

  // prototype: 在原型上添加一个方法, 比起this效率更高

  // 栈中存储数据的属性
  this.items = [];

  // 栈的相关操作
  // 入栈: 添加一个新元素到栈顶
  Stack.prototype.push = (element) => this.items.push(element);

  // 出栈: 移除栈顶元素, 同时返回被移除的元素
  Stack.prototype.pop = () => this.items.pop();

  // 返回栈顶元素
  Stack.prototype.peek = () => this.items[this.items.length - 1];

  // 返回栈里面数据元素个数
  Stack.prototype.size = () => this.items.length;

  // 如果栈里没有任何元素返回true, 否则返回false
  Stack.prototype.isEmpty = () => !this.items.length

  // 将栈结构的内容以字符串形式返回
  Stack.prototype.toString = () => {
    // 11 22 33 44 ,,,
    let resultString = "";
    for (let i = 0; i < this.items.length; i++) {
      resultString += this.items[i] + " ";
    }
    return resultString;
  };
}

// 栈的使用
const stack = new Stack();

// 1. 添加三个元素
stack.push("第一个入栈的数据");
stack.push("第二个入栈的数据");
stack.push("第三个入栈的数据");
// 2. 将栈以字符串形式返回
console.log(stack.toString());
// 3. 看看栈顶元素
console.log(stack.peek());
// 4. 删除栈顶元素
console.log(stack.pop());
console.log(stack.toString());
console.log(stack.isEmpty());
console.log(stack.size());